home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / isc / region.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-09-17  |  2.4 KB  |  100 lines

  1. /*
  2.  * Copyright (C) 2004, 2005  Internet Systems Consortium, Inc. ("ISC")
  3.  * Copyright (C) 1998-2002  Internet Software Consortium.
  4.  *
  5.  * Permission to use, copy, modify, and distribute this software for any
  6.  * purpose with or without fee is hereby granted, provided that the above
  7.  * copyright notice and this permission notice appear in all copies.
  8.  *
  9.  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  10.  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  11.  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  12.  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  13.  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  14.  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  15.  * PERFORMANCE OF THIS SOFTWARE.
  16.  */
  17.  
  18. /* $Id: region.h,v 1.19.18.2 2005/04/29 00:17:01 marka Exp $ */
  19.  
  20. #ifndef ISC_REGION_H
  21. #define ISC_REGION_H 1
  22.  
  23. /*! \file */
  24.  
  25. #include <isc/types.h>
  26.  
  27. struct isc_region {
  28.     unsigned char *    base;
  29.     unsigned int    length;
  30. };
  31.  
  32. struct isc_textregion {
  33.     char *        base;
  34.     unsigned int    length;
  35. };
  36.  
  37. /* XXXDCL questionable ... bears discussion.  we have been putting off
  38.  * discussing the region api.
  39.  */
  40. struct isc_constregion {
  41.     const void *    base;
  42.     unsigned int    length;
  43. };
  44.  
  45. struct isc_consttextregion {
  46.     const char *    base;
  47.     unsigned int    length;
  48. };
  49.  
  50. /*@{*/
  51. /*!
  52.  * The region structure is not opaque, and is usually directly manipulated.
  53.  * Some macros are defined below for convenience.
  54.  */
  55.  
  56. #define isc_region_consume(r,l) \
  57.     do { \
  58.         isc_region_t *_r = (r); \
  59.         unsigned int _l = (l); \
  60.         INSIST(_r->length >= _l); \
  61.         _r->base += _l; \
  62.         _r->length -= _l; \
  63.     } while (0)
  64.  
  65. #define isc_textregion_consume(r,l) \
  66.     do { \
  67.         isc_textregion_t *_r = (r); \
  68.         unsigned int _l = (l); \
  69.         INSIST(_r->length >= _l); \
  70.         _r->base += _l; \
  71.         _r->length -= _l; \
  72.     } while (0)
  73.  
  74. #define isc_constregion_consume(r,l) \
  75.     do { \
  76.         isc_constregion_t *_r = (r); \
  77.         unsigned int _l = (l); \
  78.         INSIST(_r->length >= _l); \
  79.         _r->base += _l; \
  80.         _r->length -= _l; \
  81.     } while (0)
  82. /*@}*/
  83.  
  84. int
  85. isc_region_compare(isc_region_t *r1, isc_region_t *r2);
  86. /*%<
  87.  * Compares the contents of two regions 
  88.  *
  89.  * Requires: 
  90.  *\li    'r1' is a valid region
  91.  *\li    'r2' is a valid region
  92.  *
  93.  * Returns:
  94.  *\li     < 0 if r1 is lexicographically less than r2
  95.  *\li     = 0 if r1 is lexicographically identical to r2
  96.  *\li     > 0 if r1 is lexicographically greater than r2
  97.  */
  98.  
  99. #endif /* ISC_REGION_H */
  100.